home *** CD-ROM | disk | FTP | other *** search
/ Aminet 5 / Aminet 5 - March 1995.iso / Aminet / util / libs / type1beta5.lha / type1 / src / util.c < prev   
C/C++ Source or Header  |  1994-12-17  |  4KB  |  197 lines

  1. /* $XConsortium: util.c,v 1.6 92/03/26 16:42:26 eswu Exp $ */
  2. /* Copyright International Business Machines,Corp. 1991
  3.  * All Rights Reserved
  4.  *
  5.  * License to use, copy, modify, and distribute this software
  6.  * and its documentation for any purpose and without fee is
  7.  * hereby granted, provided that the above copyright notice
  8.  * appear in all copies and that both that copyright notice and
  9.  * this permission notice appear in supporting documentation,
  10.  * and that the name of IBM not be used in advertising or
  11.  * publicity pertaining to distribution of the software without
  12.  * specific, written prior permission.
  13.  *
  14.  * IBM PROVIDES THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES
  15.  * OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT
  16.  * LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY,
  17.  * FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
  18.  * THIRD PARTY RIGHTS.  THE ENTIRE RISK AS TO THE QUALITY AND
  19.  * PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
  20.  * OR MAINTAIN, BELONGS TO THE LICENSEE.  SHOULD ANY PORTION OF
  21.  * THE SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM) ASSUMES
  22.  * THE ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION.  IN
  23.  * NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
  24.  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
  25.  * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
  26.  * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
  27.  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  28.  * SOFTWARE.
  29.  */
  30. /* Author: Katherine A. Hitchcock    IBM Almaden Research Laboratory */
  31.  
  32. #ifndef T1GST
  33. #include "global.h"
  34. #endif
  35.  
  36. static char *vm_base = NULL;    /* Start of virtual memory area */
  37. char *vm_next = NULL;        /* Pointer to first free byte */
  38. long vm_free = 0;        /* Count of free bytes */
  39. long vm_size = 0;        /* Total size of memory */
  40.  
  41. /*
  42.  * Initialize memory.
  43.  */
  44. boolean vm_init(int cnt)
  45. {
  46.     vm_next = vm_base = (char *)xalloc(cnt);
  47.  
  48.     if (vm_base != NULL)
  49.     {
  50.         vm_free = cnt;
  51.         vm_size = cnt;
  52.         return (TRUE);
  53.     }
  54.     else
  55.         return (FALSE);
  56.  
  57. }
  58.  
  59. /*
  60.  * Free memory.
  61.  */
  62. void free_vm(void)
  63. {
  64.     if (vm_base != NULL)
  65.         xfree(vm_base);
  66.     vm_base = NULL;
  67.     vm_next = NULL;
  68.     vm_free = 0;
  69.     vm_size = 0;
  70. }
  71.  
  72.  
  73. char *vm_alloc(int bytes)
  74. {
  75.     char *answer;
  76.  
  77.     /* Round to next word multiple */
  78.     bytes = (bytes + 3) & ~3;
  79.  
  80.     /* Allocate the space, if it is available */
  81.     if (bytes <= vm_free)
  82.     {
  83.         answer = vm_next;
  84.         vm_free -= bytes;
  85.         vm_next += bytes;
  86.     }
  87.     else
  88.         answer = NULL;
  89.  
  90.     return (answer);
  91. }
  92.  
  93. /*
  94.  * Format an Integer object
  95.  */
  96. void objFormatInteger(psobj *objP, int value)
  97. {
  98.     if (objP != NULL)
  99.     {
  100.         objP->type = OBJ_INTEGER;
  101.         objP->len = 0;
  102.         objP->data.integer = value;
  103.     }
  104. }
  105.  
  106. /*
  107.  * Format a Real object
  108.  */
  109. void objFormatReal(psobj *objP, double value)
  110. {
  111.     if (objP != NULL)
  112.     {
  113.         objP->type = OBJ_REAL;
  114.         objP->len = 0;
  115.         objP->data.real = value;
  116.     }
  117. }
  118.  
  119. /*
  120.  * Format a Boolean object
  121.  */
  122. void objFormatBoolean(psobj *objP, boolean value)
  123. {
  124.     if (objP != NULL)
  125.     {
  126.         objP->type = OBJ_BOOLEAN;
  127.         objP->len = 0;
  128.         objP->data.boolean = value;
  129.     }
  130. }
  131.  
  132. /*
  133.  * Format an Encoding object
  134.  */
  135. void objFormatEncoding(psobj *objP, int length, psobj *valueP)
  136. {
  137.     if (objP != NULL)
  138.     {
  139.         objP->type = OBJ_ENCODING;
  140.         objP->len = length;
  141.         objP->data.arrayP = valueP;
  142.     }
  143. }
  144.  
  145. /*
  146.  * Format an Array object
  147.  */
  148. void objFormatArray(psobj *objP, int length, psobj *valueP)
  149. {
  150.     if (objP != NULL)
  151.     {
  152.         objP->type = OBJ_ARRAY;
  153.         objP->len = length;
  154.         objP->data.arrayP = valueP;
  155.     }
  156. }
  157.  
  158.  
  159. /*
  160.  * Format a String object
  161.  */
  162. void objFormatString(psobj *objP, int length, char *valueP)
  163. {
  164.     if (objP != NULL)
  165.     {
  166.         objP->type = OBJ_STRING;
  167.         objP->len = length;
  168.         objP->data.valueP = valueP;
  169.     }
  170. }
  171.  
  172. /*
  173.  * Format a Name object
  174.  */
  175. void objFormatName(psobj *objP, int length, char *valueP)
  176. {
  177.     if (objP != NULL)
  178.     {
  179.         objP->type = OBJ_NAME;
  180.         objP->len = length;
  181.         objP->data.nameP = valueP;
  182.     }
  183. }
  184.  
  185. /*
  186.  * Format a File object
  187.  */
  188. void objFormatFile(psobj *objP, F_FILE *valueP)
  189. {
  190.     if (objP != NULL)
  191.     {
  192.         objP->type = OBJ_FILE;
  193.         objP->len = 0;
  194.         objP->data.fileP = valueP;
  195.     }
  196. }
  197.